Make GtkCenterBox public
authorMatthias Clasen <mclasen@redhat.com>
Fri, 2 Jun 2017 00:56:32 +0000 (17:56 -0700)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 5 Jun 2017 01:20:27 +0000 (21:20 -0400)
It provides functionality that GtkBox used to have,
and is generally useful.

docs/reference/gtk/gtk4-docs.xml
docs/reference/gtk/gtk4-sections.txt
gtk/gtk.h
gtk/gtkactionbar.c
gtk/gtkcenterbox.c
gtk/gtkcenterbox.h [new file with mode: 0644]
gtk/gtkcenterboxprivate.h [deleted file]

index ff1bc9cd22086010e2b665e5ec1c9ac4368b08c5..c2f524558ec790aa45dce1c45a5dd37b443c920c 100644 (file)
@@ -68,6 +68,7 @@
     <chapter id="LayoutContainers">
       <title>Layout Containers</title>
       <xi:include href="xml/gtkbox.xml" />
+      <xi:include href="xml/gtkcenterbox.xml" />
       <xi:include href="xml/gtkgrid.xml" />
       <xi:include href="xml/gtkrevealer.xml" />
       <xi:include href="xml/gtklistbox.xml" />
index 28ce71076b0e6334d1ccd0669fbdb24b5591a38e..e4bffc236e6a2a86b67c471d017874b8481ac12b 100644 (file)
@@ -341,6 +341,26 @@ GtkBoxPrivate
 gtk_box_get_type
 </SECTION>
 
+<SECTION>
+<FILE>gtkcenterbox</FILE>
+<TITLE>GtkCenterBox</TITLE>
+GtkCenterBox
+gtk_center_box_new
+gtk_center_box_set_start_widget
+gtk_center_box_set_center_widget
+gtk_center_box_set_end_widget
+gtk_center_box_get_start_widget
+gtk_center_box_get_center_widget
+gtk_center_box_get_end_widget
+<PRIVATE>
+GTK_TYPE_CENTER_BOX
+GTK_CENTER_BOX
+GTK_CENTER_BOX_CLASS
+GTK_IS_CENTER_BOX
+GTK_IS_CENTER_BOX_CLASS
+GTK_CENTER_BOX_GET_CLASS
+</SECTION>
+
 <SECTION>
 <FILE>gtklistbox</FILE>
 <TITLE>GtkListBox</TITLE>
index 8d13dfd66c466a9c57df066d0a58dabdd04abf5b..0e8b26fc045d34add6e9503eaff089f58f16cb0a 100644 (file)
--- a/gtk/gtk.h
+++ b/gtk/gtk.h
@@ -68,6 +68,7 @@
 #include <gtk/gtkcellrenderertext.h>
 #include <gtk/gtkcellrenderertoggle.h>
 #include <gtk/gtkcellview.h>
+#include <gtk/gtkcenterbox.h>
 #include <gtk/gtkcheckbutton.h>
 #include <gtk/gtkcheckmenuitem.h>
 #include <gtk/gtkclipboard.h>
index 986f51e99eaee692f8c740b1d8c4e3456c6b6f8e..bf598b7874cd5c1d0c25a7c8f5c66b4e605391e6 100644 (file)
@@ -30,7 +30,7 @@
 #include "gtkwidgetprivate.h"
 #include "gtkcontainerprivate.h"
 #include "gtkprivate.h"
-#include "gtkcenterboxprivate.h"
+#include "gtkcenterbox.h"
 
 #include <string.h>
 
index 316126c2aca3085820a5fb065582bf4a3e4f7431..7970baaa9fe6645b27f6f3dda0f78c481f8b3192 100644 (file)
@@ -1,5 +1,67 @@
+/*
+ * Copyright (c) 2017 Timm Bäder <mail@baedert.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Author: Timm Bäder <mail@baedert.org>
+ */
+
+/**
+ * SECTION:gtkcenterbox
+ * @Short_description: A centering container
+ * @Title: GtkCenterBox
+ * @See_also: #GtkBox
+ *
+ * The GtkCenterBox widget arranges three children in a horizontal
+ * or vertical arrangement, keeping the middle child centered as well
+ * as possible.
+ *
+ * To add children to GtkCenterBox, use gtk_center_box_set_start_widget(),
+ * gtk_center_box_set_center_widget() and gtk_center_box_set_end_widget().
+ *
+ * # CSS nodes
+ *
+ * GtkCenterBox uses a single CSS node with name box.
+ *
+ * In horizontal orientation, the nodes of the children are always arranged
+ * from left to right. So :first-child will always select the leftmost child,
+ * regardless of text direction.
+ *
+ * In vertical orientation, the are arranged from top to bottom.
+ */
+
+#include "config.h"
+#include "gtkcenterbox.h"
+#include "gtkcssnodeprivate.h"
+#include "gtkwidgetprivate.h"
+
+struct _GtkCenterBox
+{
+  GtkWidget parent_instance;
+
+  GtkWidget *start_widget;
+  GtkWidget *center_widget;
+  GtkWidget *end_widget;
+};
+
+
+struct _GtkCenterBoxClass
+{
+  GtkWidgetClass parent_class;
+};
 
-#include "gtkcenterboxprivate.h"
 
 G_DEFINE_TYPE (GtkCenterBox, gtk_center_box, GTK_TYPE_WIDGET);
 
@@ -76,8 +138,7 @@ gtk_center_box_size_allocate (GtkWidget     *widget,
 
   GTK_WIDGET_CLASS (gtk_center_box_parent_class)->size_allocate (widget, allocation);
 
-
-  // TODO: Allocate natural sizes if possible?
+  /* TODO: Allocate natural sizes if possible? */
 
   /* Start Box */
   gtk_widget_measure (self->start_widget, GTK_ORIENTATION_HORIZONTAL,
@@ -93,7 +154,6 @@ gtk_center_box_size_allocate (GtkWidget     *widget,
   gdk_rectangle_union (&clip, &clip, &child_clip);
   start_size = child_allocation.width;
 
-
   /* End Box */
   gtk_widget_measure (self->end_widget, GTK_ORIENTATION_HORIZONTAL,
                       allocation->height,
@@ -153,6 +213,9 @@ gtk_center_box_class_init (GtkCenterBoxClass *klass)
   widget_class->measure = gtk_center_box_measure;
   widget_class->size_allocate = gtk_center_box_size_allocate;
   widget_class->snapshot = gtk_center_box_snapshot;
+
+  gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_FILLER);
+  gtk_widget_class_set_css_name (widget_class, "box");
 }
 
 static void
@@ -165,12 +228,30 @@ gtk_center_box_init (GtkCenterBox *self)
   self->end_widget = NULL;
 }
 
+/**
+ * gtk_center_box_new:
+ *
+ * Creates a new #GtkCenterBox.
+ *
+ * Returns: the new #GtkCenterBox.
+ *
+ * Since: 3.92
+ */
 GtkWidget *
 gtk_center_box_new (void)
 {
   return GTK_WIDGET (g_object_new (GTK_TYPE_CENTER_BOX, NULL));
 }
 
+/**
+ * gtk_center_box_set_start_widget:
+ * @self: a #GtkCenterBox
+ * @child: the child
+ *
+ * Sets the start widget.
+ *
+ * Since: 3.92
+ */
 void
 gtk_center_box_set_start_widget (GtkCenterBox *self,
                                  GtkWidget    *child)
@@ -183,9 +264,18 @@ gtk_center_box_set_start_widget (GtkCenterBox *self,
     gtk_widget_set_parent (child, GTK_WIDGET (self));
 }
 
+/**
+ * gtk_center_box_set_center_widget:
+ * @self: a #GtkCenterBox
+ * @child: the child
+ *
+ * Sets the center widget.
+ *
+ * Since: 3.92
+ */
 void
 gtk_center_box_set_center_widget (GtkCenterBox *self,
-                                 GtkWidget    *child)
+                                 GtkWidget     *child)
 {
   if (self->center_widget)
     gtk_widget_unparent (self->center_widget);
@@ -195,6 +285,15 @@ gtk_center_box_set_center_widget (GtkCenterBox *self,
     gtk_widget_set_parent (child, GTK_WIDGET (self));
 }
 
+/**
+ * gtk_center_box_set_end_widget:
+ * @self: a #GtkCenterBox
+ * @child: the child
+ *
+ * Sets the end widget.
+ *
+ * Since: 3.92
+ */
 void
 gtk_center_box_set_end_widget (GtkCenterBox *self,
                                GtkWidget    *child)
@@ -207,18 +306,48 @@ gtk_center_box_set_end_widget (GtkCenterBox *self,
     gtk_widget_set_parent (child, GTK_WIDGET (self));
 }
 
+/**
+ * gtk_center_box_get_start_widget:
+ * @self: a #GtkCenterBox
+ *
+ * Gets the start widget.
+ *
+ * Returns: the start widget.
+ *
+ * Since: 3.92
+ */
 GtkWidget *
 gtk_center_box_get_start_widget (GtkCenterBox *self)
 {
   return self->start_widget;
 }
 
+/**
+ * gtk_center_box_get_center_widget:
+ * @self: a #GtkCenterBox
+ *
+ * Gets the center widget.
+ *
+ * Returns: the center widget.
+ *
+ * Since: 3.92
+ */
 GtkWidget *
 gtk_center_box_get_center_widget (GtkCenterBox *self)
 {
   return self->center_widget;
 }
 
+/**
+ * gtk_center_box_get_end_widget:
+ * @self: a #GtkCenterBox
+ *
+ * Gets the end widget.
+ *
+ * Returns: the end widget.
+ *
+ * Since: 3.92
+ */
 GtkWidget *
 gtk_center_box_get_end_widget (GtkCenterBox *self)
 {
diff --git a/gtk/gtkcenterbox.h b/gtk/gtkcenterbox.h
new file mode 100644 (file)
index 0000000..709ac60
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2017 Timm Bäder <mail@baedert.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Author: Timm Bäder <mail@baedert.org>
+ *
+ */
+
+#ifndef __GTK_CENTER_BOX_H__
+#define __GTK_CENTER_BOX_H__
+
+#include "gtkwidget.h"
+
+#define GTK_TYPE_CENTER_BOX                 (gtk_center_box_get_type ())
+#define GTK_CENTER_BOX(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_CENTER_BOX, GtkCenterBox))
+#define GTK_CENTER_BOX_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_CENTER_BOX, GtkCenterBoxClass))
+#define GTK_IS_CENTER_BOX(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_CENTER_BOX))
+#define GTK_IS_CENTER_BOX_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_CENTER_BOX))
+#define GTK_CENTER_BOX_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_CENTER_BOX, GtkCenterBoxClass))
+
+typedef struct _GtkCenterBox             GtkCenterBox;
+typedef struct _GtkCenterBoxClass        GtkCenterBoxClass;
+
+GDK_AVAILABLE_IN_3_92
+GType      gtk_center_box_get_type (void) G_GNUC_CONST;
+
+GDK_AVAILABLE_IN_3_92
+GtkWidget *gtk_center_box_new (void);
+GDK_AVAILABLE_IN_3_92
+void       gtk_center_box_set_start_widget   (GtkCenterBox *self,
+                                              GtkWidget    *child);
+GDK_AVAILABLE_IN_3_92
+void       gtk_center_box_set_center_widget  (GtkCenterBox *self,
+                                              GtkWidget    *child);
+GDK_AVAILABLE_IN_3_92
+void       gtk_center_box_set_end_widget     (GtkCenterBox *self,
+                                              GtkWidget    *child);
+
+GDK_AVAILABLE_IN_3_92
+GtkWidget * gtk_center_box_get_start_widget  (GtkCenterBox *self);
+GDK_AVAILABLE_IN_3_92
+GtkWidget * gtk_center_box_get_center_widget (GtkCenterBox *self);
+GDK_AVAILABLE_IN_3_92
+GtkWidget * gtk_center_box_get_end_widget    (GtkCenterBox *self);
+
+
+#endif
diff --git a/gtk/gtkcenterboxprivate.h b/gtk/gtkcenterboxprivate.h
deleted file mode 100644 (file)
index 445d462..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-
-#ifndef __GTK_CENTER_BOX_H__
-#define __GTK_CENTER_BOX_H__
-
-#include "gtkwidget.h"
-
-#define GTK_TYPE_CENTER_BOX                 (gtk_center_box_get_type ())
-#define GTK_CENTER_BOX(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_CENTER_BOX, GtkCenterBox))
-#define GTK_CENTER_BOX_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_CENTER_BOX, GtkCenterBoxClass))
-#define GTK_IS_CENTER_BOX(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_CENTER_BOX))
-#define GTK_IS_CENTER_BOX_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_CENTER_BOX))
-#define GTK_CENTER_BOX_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_CENTER_BOX, GtkCenterBoxClass))
-
-typedef struct _GtkCenterBox             GtkCenterBox;
-typedef struct _GtkCenterBoxClass        GtkCenterBoxClass;
-
-struct _GtkCenterBox
-{
-  GtkWidget parent_instance;
-
-  GtkWidget *start_widget;
-  GtkWidget *center_widget;
-  GtkWidget *end_widget;
-};
-
-struct _GtkCenterBoxClass
-{
-  GtkWidgetClass parent_class;
-};
-
-GType      gtk_center_box_get_type (void) G_GNUC_CONST;
-
-GtkWidget *gtk_center_box_new (void);
-void       gtk_center_box_set_start_widget  (GtkCenterBox *self, GtkWidget *child);
-void       gtk_center_box_set_center_widget (GtkCenterBox *self, GtkWidget *child);
-void       gtk_center_box_set_end_widget    (GtkCenterBox *self, GtkWidget *child);
-
-GtkWidget * gtk_center_box_get_start_widget  (GtkCenterBox *self);
-GtkWidget * gtk_center_box_get_center_widget (GtkCenterBox *self);
-GtkWidget * gtk_center_box_get_end_widget    (GtkCenterBox *self);
-
-
-#endif